package com.zcgk.modules.file.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zcgk.modules.file.entity.AttachmentEntity;
import com.zcgk.modules.file.entity.vo.req.AddAttachmentReqVO;
import com.zcgk.modules.file.entity.vo.resp.DownloadAttachmentRespVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * 附件表服务类
 * </p>
 *
 * @author Francis
 * @since 2020-02-20
 */
public interface IAttachmentService extends IService<AttachmentEntity> {

    /**
     * 【新老系统共用】文件上传
     *      1. 上传文件
     *      2. insert记录
     *
     * @param file file
     * @param reqVO 入参vo
     * @return 附件主键id 【可以选择不接收，取决于前端是自动上传还是手动上传】
     */
    String add(MultipartFile file, AddAttachmentReqVO reqVO);


    /**
     * 【新系统用】根据 资源Id 获取文件url映射路径list。如： /file/tf/uuid.jpg
     *      该接口主要用于图片预览
     *
     * @param resId 资源id
     * @return 文件urlList
     */
    List<String> queryUrlListByResId (String resId);


    /**
     * 【老系统用】根据 资源Id、系统Id、表名 获取文件url映射路径list。如： /file/tf/uuid.jpg
     *      该接口主要用于图片预览
     *
     * @param resId 资源id
     * @param systemId 系统id
     * @param tableName 表名
     * @return 文件urlList
     */
    List<String> queryUrlListByResId4OldSys(String resId, String systemId, String tableName);


    /**
     * 【新系统用】根据资源id下载文件。如果是多文件，则下载的是压缩包
     *      controller的返回示例：
     *         HttpHeaders header = new HttpHeaders();
     *         header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
     *         header.setContentDispositionFormData("attachment", respVO.getAttName());
     *         return new ResponseEntity<byte[]>(respVO.getData(), header, HttpStatus.OK);
     *
     * @param resId 资源id
     * @return 文件数据
     */
    DownloadAttachmentRespVO downloadByResId(String resId);


    /**
     * 【新系统用】根据资源id下载文件。如果是多文件，则下载的是压缩包
     *      controller的返回示例：
     *         HttpHeaders header = new HttpHeaders();
     *         header.setContentType(MediaType.APPLICATION_OCTET_STREAM);
     *         header.setContentDispositionFormData("attachment", respVO.getAttName());
     *         return new ResponseEntity<byte[]>(respVO.getData(), header, HttpStatus.OK);
     *
     * @param resId 资源id
     * @param systemId 系统id
     * @param tableName 表名
     * @return 文件数据
     */
    DownloadAttachmentRespVO downloadByResId4OldSys(String resId, String systemId, String tableName);


    /**
     * 【新、老系统共用】根据 附件主键id 删除附件
     *      1. 从数据库中delete
     *      2. 从硬盘上删除附件
     *
     * @param attId 附件主键id
     */
    void deleteById(String attId);


    /**
     * 【新系统用】根据 附件资源id 删除附件
     *      1. 从数据库中delete
     *      2. 从硬盘上删除附件
     *
     * @param resId 附件资源id
     */
    void deleteByResId(String resId);


    /**
     * 【老系统用】根据 附件资源id、系统id、表名 删除附件
     *      1. 从数据库中delete
     *      2. 从硬盘上删除附件
     *
     * @param resId 附件资源id
     * @param systemId 系统id
     * @param tableName 表名
     */
    void deleteByResId4OldSys(String resId, String systemId, String tableName);
}
